package com.lvmama.dest.schedule.tasks.demo;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;

import org.apache.log4j.Logger;
import org.springframework.stereotype.Component;

import com.taobao.pamirs.schedule.IScheduleTaskDealSingle;
import com.taobao.pamirs.schedule.TaskItemDefine;

@Component
public class DemoTest1 implements IScheduleTaskDealSingle<String>{
	
	private final Logger logger = Logger.getLogger(this.getClass());
	
    //示例
//	@Autowired
//	UpdateOrderStatusSchedule updateOrderStatusSchedule;
	

	/** 
	* @Description: 获取任务的比较器,只有在NotSleep模式下需要用到
	* @return
	* @author xiachengliang
	* @date 2017年6月22日 下午5:30:23 
	*/
	@Override
	public Comparator<String> getComparator() {//我们这里都使用的是sleep模式
		logger.info("getComparator");
		return null;
	}
	/** 
	* @Description: 根据条件，查询当前调度服务器可处理的任务	
	* @param taskParameter 任务的自定义参数，字符串类型，可以在页面传入执行任务所需的各个参数的字符串集合，然后在这里拆解（如：param1，param2，param3,..）
	* @param ownSign 当前环境名称
	* @param taskItemNum 任务项数量
	* @param taskItemList 集合中TaskItemDefine的id值对应任务项值
	* @param eachFetchDataNum 每次获取数据的数量
	* @return
	* @throws Exception
	* @author xiachengliang
	* @date 2017年6月22日 下午5:14:03 
	*/
	//每次任务调度会先执行selectTasks方法，再去执行execute方法
	@Override
	public List<String> selectTasks(String taskParameter, String ownSign, int taskItemNum,
			List<TaskItemDefine> taskItemList, int eachFetchDataNum) throws Exception {//
		// 如果需要用到 taskParameter（任务的自定义参数，可以通过修改页面的参数， 灵活的控制任务的执行）
		// 我们可以在selectTasks方法的返回的集合中加入taskParameter
		// 然后在excute方法中对任务自定义参数进行处理
		// 如果不需要用到任务自定义参数，可以result.add("") 只要确保返回的集合size = 1 就可以。
		List<String> result = new ArrayList<String>();
		// result.add("test");
		result.add(taskParameter);
		// 这里的result.size = 1,所以在去执行execute方法的时候，execute只会执行一次
		// 有的任务处理只需要定期执行一次，并且这里不关心任务的处理过程，可以采用这种方法。
		return result;
	}


	/** 
	* @Description: 执行单个任务 
	* @param task  任务
	* @param ownSign 当前环境名称,没什么用。
	* @return
	* @throws Exception
	* @author xiachengliang
	* @date 2017年6月22日 下午5:30:43 
	*/
	@Override
	public boolean execute(String task, String ownSign) throws Exception {
		//task 就是 selectTasks 返回的集合中的对象，execute 会一个个执行 selectTasks 返回集合中的对象，如果集合为空就不执行。
		//这里我们只处理一次
		
		//（1）使用任务自定义参数
//		updateOrderStatusSchedule.updateOrderStatusBySuppLierId(task);
		
		//（2）不使用任务自定义参数
//		updateOrderStatusSchedule.updateOrderStatus();	
		
//		for (int i = 1; i <= 20; i++) {
//			logger.info("第" + i + "个输出。");
//		}
//		Thread.sleep(10000);
		return true;
	}
}
